#!/usr/bin/env python
# -*- coding: utf-8 -*-
from flask import jsonify
from common.settings.constants import SUCCESS, ERROR


def make_success(msg="操作成功", code=SUCCESS, data=None, extra: dict = None):
    """
    通用成功返回结构
    :param msg: 提示信息
    :param code: 状态码（默认 SUCCESS = 0）
    :param data: 返回的主体数据（可以是 dict、list 等）
    :param extra: 附加扩展信息（可选），会 merge 到返回体中
    """
    response = {
        "code": code,
        "msg": msg,
        "data": data or [],
    }
    if extra:
        response.update(extra)
    return jsonify(response)


def make_error(msg="操作失败", code=ERROR, data=None):
    """
    通用错误返回结构
    :param msg: 错误信息
    :param code: 错误码
    :param data: 附加错误数据（如异常栈、字段等）
    """
    return jsonify({
        "code": code,
        "msg": msg,
        "data": data or []
    })


def make_validation_error(errors: dict = None, msg="参数验证失败"):
    """
    参数验证错误（HTTP 400）
    场景：字段格式不正确、缺失必填参数等
    :param msg:
    :param errors: 字段错误详情，如 {"amount": "金额不能为空"}
    """
    return jsonify({
        "code": 400,
        "msg": msg,
        "data": {"errors": errors or "请求参数不合法"}
    }), 400


def make_unauthorized(msg="未登录或登录已过期"):
    """
    未认证错误（HTTP 401）
    场景：Token 无效、未登录
    """
    return make_error(msg=msg, code=401), 401


def make_forbidden(msg="没有操作权限"):
    """
    权限不足错误（HTTP 403）
    场景：用户访问了未授权资源
    """
    return make_error(msg=msg, code=403), 403


def make_not_found(msg="资源不存在"):
    """
    数据不存在（HTTP 404）
    场景：访问了不存在的账单、分类、用户等
    """
    return make_error(msg=msg, code=404), 404


def make_server_error(msg="服务器异常，请稍后再试"):
    """
    💥 系统内部异常（HTTP 500）
    场景：后端代码抛异常、数据库连接失败等
    """
    return make_error(msg=msg, code=500), 500
